﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Framework.Core.Extensions
{
	public static class StringExtensions
	{
		//
		// 摘要:
		//     从字符串中检索子字符串，在指定头部字符串之后，指定尾部字符串之前
		//
		// 参数:
		//   str:
		//     目标字符串
		//
		//   after:
		//     头部字符串，在它之后
		//
		//   before:
		//     尾部字符串，在它之前
		//
		//   startIndex:
		//     搜索的开始位置
		//
		//   positions:
		//     位置数组，两个元素分别记录头尾位置
		//
		// 言论：
		//     常用于截取xml某一个元素等操作
		public static string Substring(this string str, string? after, string? before = null, int startIndex = 0, int[]? positions = null)
		{
			if (string.IsNullOrEmpty(str))
			{
				return str;
			}

			if (string.IsNullOrEmpty(after) && string.IsNullOrEmpty(before))
			{
				return str;
			}

			int num = -1;
			if (!after.IsNullOrEmpty())
			{
				num = str.IndexOf(after, startIndex);
				if (num < 0)
				{
					return string.Empty;
				}

				num += after.Length;
				if (positions != null && positions.Length != 0)
				{
					positions[0] = num;
				}
			}

			if (string.IsNullOrEmpty(before))
			{
				int num2 = num;
				return str.Substring(num2, str.Length - num2);
			}

			int num3 = str.IndexOf(before, (num >= 0) ? num : startIndex);
			if (num3 < 0)
			{
				return string.Empty;
			}

			if (positions != null && positions.Length > 1)
			{
				positions[1] = num3;
			}

			if (num >= 0)
			{
				int num2 = num;
				return str.Substring(num2, num3 - num2);
			}

			return str.Substring(0, num3);
		}
	}
}
